/*
 * @author				: Juliano Zinni
 * @create				: 02/10/2011
 * @version				: 1.0
 * @description			: Página responsável por registrar as entradas(doações) no fluxo financeiro
*/

/*
 * @description: Funções para manipulação de entradas(doações)
 * @author: Juliano Zinni
 * @since: 04/10/2011
*/

var functionsLoadDataUpdate = {
	
	Projeto_codigo: ""
	,Movimentacao_codigo: ""
	
	,listarPessoasEntrada: function(codigoProjeto, codigoMovimentacao){
		
		functionsLoadDataUpdate.Projeto_codigo = codigoProjeto
		functionsLoadDataUpdate.Movimentacao_codigo = codigoMovimentacao
		
		var objparams = {
			tipo: "Doador"
		}
		listaPessoasEntrada.load({params : objparams, callback: functionsLoadDataUpdate.listarProjetos});
	}
	
	,listarProjetos: function(record, options, success){
		if(success){
			var objparams = {
				
			}
			
			listaProjetos.load({params : objparams, callback: functionsLoadDataUpdate.listarDotacoes});
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem dos voluntários",
				type: 'error'
			});
		}
		
		
	}
	
	,listarDotacoes: function(record, options, success){
		if(success){
			
			var objparams = {
				Projeto_codigo: functionsLoadDataUpdate.Projeto_codigo
			}
			listaDotacoes.load({params : objparams, callback: functionsLoadDataUpdate.capturaMovimentacao});

		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem dos projetos",
				type: 'error'
			});
		}
		
	}
	
	,capturaMovimentacao: function(record, options, success){
		if(success){
			var objparams = {
				codigo: functionsLoadDataUpdate.Movimentacao_codigo
			}
			capturaMovimentacao.load({params : objparams, callback: functionsLoadDataUpdate.returnCapturaMovimentacao});
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem das dotações",
				type: 'error'
			});
		}
	}
		
	,returnCapturaMovimentacao: function(record, options, success){
		if(success){
			formEntrada.getForm().loadRecord( record[0] );
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da captura da movimentação",
				type: 'error'
			});
			
		}	
	}
		
}


var functionsEntradaForm = {
	
	dt_atual: new Date()
		
	,init: function(){
		functionsProjetoMovimentacao.listaProjetos();
	}

	
	,capturaMovimentacao: function(codigoMovimentacao){
		var objparams = {
			codigo: codigoMovimentacao
		}
		capturaMovimentacao.load({params : objparams, callback: this.returnCapturaMovimentecao});
	}
	
	,returnCapturaMovimentecao: function(record, options, success){
		formEntrada.getForm().loadRecord( record[0] );
	}
	
	,insereRegistro: function(button){
		
		var form = formEntrada.getForm();		
		
		
		if(form.isValid())
		{
		
			this.params = formEntrada.form.getValues(true);
			this.params += "&tipo=C";
			this.params += "&tipoPessoa=Doador";
			
			this.loaderTarget = button;
			Ext.ux.Loader.start({sender: button, waitingText: 'Salvando...'});
	
			Ext.Ajax.request({
				url: baseURL + '/service/index.php?controller=MovimentoCaixaController&service=inserir',
				success:  function(result){
				
					var objRetorno = Ext.decode(result.responseText);
					
					if(objRetorno.success == true){
						Ext.ux.MessageBox.flash({
							msg: objRetorno.message,
							type: 'success'
						});
					   
						Ext.ux.Loader.stop(this.loaderTarget);
						windowEntradaForm.hide();
						functionsGridMovimentacao.carregaGrid();
						
					}else{
						Ext.ux.MessageBox.flash({
							msg: objRetorno.message,
							type: 'error'
						});
					}
	
				},
				
				params: this.params,
				scope: this			
			});
		}else{
			Ext.ux.MessageBox.flash({
				msg: 'Preencha todos os campos obrigatórios',
				type: 'warning',
				pause: 3
			});
		}
	}
	
	,alteraRegistro: function(button){
		
		var form = formEntrada.getForm();
		
		
		if(form.isValid())
		{
			this.params = formEntrada.form.getValues(true);
			this.params += "&tipo=C";
			this.params += "&tipoPessoa=Doador";
			
			this.loaderTarget = button;
			Ext.ux.Loader.start({sender: button, waitingText: 'Alterando...'});

			Ext.Ajax.request({
				url: baseURL + '/service/index.php?controller=MovimentoCaixaController&service=alterar',
				success:  function(result){
				
					var objRetorno = Ext.decode(result.responseText);
					
					if(objRetorno.success == true){
						Ext.ux.MessageBox.flash({
							msg: objRetorno.message,
							type: 'success'
						});
					   
						Ext.ux.Loader.stop(this.loaderTarget);
						windowEntradaForm.hide();
						functionsGridMovimentacao.carregaGrid();
						
					}else{
						Ext.ux.MessageBox.flash({
							msg: objRetorno.message,
							type: 'error'
						});
					}
	
				},
				
				params: this.params,
				scope: this			
			});                    
		}else{
			Ext.ux.MessageBox.flash({
				msg: 'Preencha todos os campos obrigatórios',
				type: 'warning',
				pause: 3
			});
		
		}
		
	}
	
	,confimaCancelamento: function(){
		Ext.MessageBox.confirm('Confirmação de cancelamento','Realmente deseja cancelar essa operação?', function(btn)
		{
			if(btn == 'yes')
			{
				windowEntradaForm.hide();
			}
		}, this);

	}
	
	,resetForm: function(){
		formEntrada.form.reset();
	}
	
}

var functionsProjetoMovimentacao = {
	
	carregaCombos: function(codProjeto, codDotacao){
		functionsProjetoMovimentacao.listaDotacoes(codProjeto, codDotacao);
	}
		
	,listaProjetos: function (){
		var objparams = {
		
		}
		
		listaProjetos.load({params : objparams, callback: functionsProjetoMovimentacao.returnListaProjetos});
	}

	,returnListaProjetos: function(record, options, success){
		if(success){
			
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem dos projetos",
				type: 'error'
			});
		}
	}
	
	,listaDotacoes: function(codProjeto){
		var objparams = {
			Projeto_codigo: codProjeto
		}
		listaDotacoes.load({params : objparams, callback: functionsProjetoMovimentacao.returnListaDotacoes});
	}
	
	,returnListaDotacoes: function(record, options, success){
		if(success){
			formEntrada.getForm().findField("Dotacao_codigo").setVisible(true);
			formEntrada.getForm().findField("Dotacao_codigo").clearValue();
		}else{
			Ext.ux.MessageBox.flash({
				msg: "Ocorreu algum erro no momento da listagem das dotações",
				type: 'error'
			});
		}
	}
	
}


var functionsPessoaMovimentacao = {
	
	listarPessoasEntrada: function(){
		var objparams = {
			tipo: "Doador"
		}
		listaPessoasEntrada.load({params : objparams, callback: functionsPessoaMovimentacao.returnListaVoluntarios});
	}

	,returnListaVoluntarios: function(record, options, success){
		
		
	}
}


var listaPessoasEntrada = new Ext.data.JsonStore({
    storeId: 'listaPessoasEntrada',
    url: baseURL + '/service/index.php?controller=PessoaController&service=listarPessoasPorTipo',
    root: 'elements',
    autoLoad: false,
    sortInfo: {field: 'Pessoa_nome', direction: 'ASC'},
    fields: [
		{
		    name: 'Pessoa_codigo',
		    mapping: 'codigo'
		}
		,{
		    name: 'Pessoa_nome',
		    mapping: 'nome'
		}  
    ],
    listeners: {
		"load": function(){
    		var defaultData = {
    			Pessoa_codigo: 'NULL',
    			Pessoa_nome: '--'
    		};
    		var recId = 100; // provide unique id for the record
    		var r = new this.recordType(defaultData, ++recId); // create new record
    		this.insert(0, r); // insert a new record into the store (also see add)
		}
	
	}
});


var capturaMovimentacao = new Ext.data.JsonStore({
    storeId: 'capturaMovimentacao',
    url: baseURL + '/service/index.php?controller=MovimentoCaixaController&service=capturarMovimentoCaixa',
    root: 'elements',
    autoLoad: false,
	fields: [
		{
		    name: 'codigo',
		    mapping: 'codigo'
		}
		,{
		    name: 'Atividade_codigo',
		    mapping: 'Atividade_codigo'
		}
		,{
		    name: 'Pessoa_codigo',
		    mapping: 'Pessoa_codigo'
		}
		,{
		    name: 'tipoPessoa',
		    mapping: 'tipoPessoa'
		}
		,{
		    name: 'Dotacao_codigo',
		    mapping: 'Dotacao_codigo'
		}
		,{
		    name: 'Projeto_codigo',
		    mapping: 'Projeto_codigo'
		}
		,{
		    name: 'dataMovimentacao',
		    mapping: 'dataMovimentacao'
		}
		,{
		    name: 'tipo',
		    mapping: 'tipo'
		}
		,{
		    name: 'descricao',
		    mapping: 'descricao'
		}
		,{
		    name: 'valorOperacao',
		    mapping: 'valorOperacao'
		}
		,{
		    name: 'especie',
		    mapping: 'especie'
		}
		,{
		    name: 'numeroNota',
		    mapping: 'numeroNota'
		}
    ]
});


var listaProjetos = new Ext.data.JsonStore({
    storeId: 'listaProjetos',
    url: baseURL + '/service/index.php?controller=ProjetoController&service=listarProjetos',
    root: 'elements',
    autoLoad: false,
	sortInfo: {field: 'nomeProjeto', direction: 'ASC'},
    fields: [
		{
		    name: 'codigoProjeto',
		    mapping: 'codigo'
		}
		,{
            name: 'nomeProjeto',
            mapping: 'nome'
        }
    ]
});


var listaDotacoes = new Ext.data.JsonStore({
    storeId: 'listaDotacoes',
    url: baseURL + '/service/index.php?controller=DotacaoController&service=listarDotacoes',
    root: 'elements',
    autoLoad: false,
	sortInfo: {field: 'nomeDotacao', direction: 'ASC'},
    fields: [
		{
		    name: 'codigoDotacao',
		    mapping: 'codigo'
		}
		,{
            name: 'nomeDotacao',
            mapping: 'nome'
        }
    ]
});


var formEntrada = new Ext.form.FormPanel({
	layout: 'form'
	, defaultType: 'textfield'
	, bodyStyle: 'padding:8px'
	, border: false
	, defaults:{
		anchor: '100%'
	}
	, items:[
 		{
 			xtype: 'fieldset'
 			, title: 'Dados Movimentação'
 			, collapsible: true
 			, labelWidth: 120
 			, defaults:{
 				anchor: '100%'
 			}
 			, items:[
				{
					xtype: 'hidden',
					name: 'codigo',
					id:'codigo'
				}
				,{
					xtype: 'combo'
					,fieldLabel: 'Doador'
					,name: 'Pessoa_codigo'
					,store: listaPessoasEntrada
					,displayField: 'Pessoa_nome'
					,valueField: 'Pessoa_codigo'
					,hiddenName: 'Pessoa_codigo'
					,mode: 'local'
					,typeAhead: true					
					,editable: false
					,triggerAction: 'all'
				}
				
				
				
				,{
					xtype: 'combo'
					,fieldLabel: 'Projeto'
					,name: 'Projeto_codigo'
					,store: listaProjetos
					,displayField: 'nomeProjeto'
					,valueField: 'codigoProjeto'
					,hiddenName: 'Projeto_codigo'
					,mode: 'local'
					,typeAhead: true
					,allowBlank: false
					,triggerAction: 'all'
					,editable: false
					
					,listeners:{
			         	scope: this
			         	,'select': function(){
							functionsProjetoMovimentacao.listaDotacoes(formEntrada.getForm().findField("Projeto_codigo").getValue())
						}
			      	}
			    	

				}
				
				,{
					xtype: 'combo'
					,fieldLabel: 'Dotação'
					,name: 'Dotacao_codigo'
					,store: listaDotacoes
					//,hidden: true
					,displayField: 'nomeDotacao'
					,valueField: 'codigoDotacao'
					,hiddenName: 'Dotacao_codigo'
					,mode: 'local'
					,typeAhead: true
					,allowBlank: false
					,triggerAction: 'all'
					,editable: false
					
				}
				,{
					xtype: 'datefield',
					fieldLabel: 'Data Movimentação',
					showToday: true,
					//value: functionsMovimentacaoForm.dt_atual,
					name: 'dataMovimentacao'
				}
				
				,{
					xtype: 'textarea',
					fieldLabel: 'Descrição',
					name: 'descricao'
				}
				,{
					xtype: 'masktextfield',
					fieldLabel: 'Valor Operação',
					name: 'valorOperacao',
					mask: 'R$ #9.999.999.990,00',
					money: true,
					allowBlank: false
				}
				,{
					xtype: 'combo'
					,fieldLabel: 'Espécie'
					,name: 'especie'
					,store: [['ESP','Dinheiro'],['DOC','Doc'],['CHQ','Cheque'],['TED','Ted']]
					,displayField: 'especie'
					,valueField: 'codigo'
					,hiddenName: 'especie'
					,mode: 'local'
					,typeAhead: true
					,editable: false
					,allowBlank: false
					,triggerAction: 'all'
				}
				,{
					xtype: 'numberfield',
					fieldLabel: 'Número Nota',
					name: 'numeroNota'
				}
 			]
 		}
     ]
});

var windowEntradaForm = new Ext.Window({
	title: 'Registro de Entradas'
	, width: 800
	, height: 500
	, items: formEntrada
	, layout: 'fit'
	, modal: true
	, closeAction:'hide'
	,listeners: {
		"show": function(){
			formEntrada.getForm().findField("dataMovimentacao").setValue(functionsEntradaForm.dt_atual);
		}
	}
	, buttons: [
		{
			text: 'Salvar'
	   		, iconCls: 'bt_salvar'
	   		, scope	: this
	   		, handler: function(){
				if(Ext.getCmp('codigo').getValue() !=  ""){
					functionsEntradaForm.alteraRegistro();
				}else{
					functionsEntradaForm.insereRegistro();
				}
			
			}
	   	}
		,{
			text: 'Cancelar'
			, iconCls: 'bt_cancelar'
			, scope	: this
			, handler: functionsEntradaForm.confimaCancelamento
		}
	]
	
});
